﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tetris.Game.Common.TetrisCenter.TetrisBase;
using Tetris.Game.ControlsBase;

namespace Tetris.Game.Common.Algorithm
{
    //public class TetrisAI
    //{
    //    public BlockShapeBase FindBestMove(BlockShapeBase currentShape, BlockControl[,] gameBoard)
    //    {
    //        BlockShapeBase bestMove = null;
    //        double bestScore = double.NegativeInfinity;

    //        // 遍历所有可能的旋转和移动
    //        foreach (var shape in GetAllPossibleMoves(currentShape, gameBoard))
    //        {
    //            foreach (var move in GetAllPossibleMoves(shape, gameBoard))
    //            {
    //                // 评估当前移动的得分
    //                double score = EvaluateMove(move, gameBoard);

    //                // 选择得分最高的移动
    //                if (score > bestScore)
    //                {
    //                    bestScore = score;
    //                    bestMove = move;
    //                }
    //            }
    //        }

    //        return bestMove;
    //    }

    //    private IEnumerable<BlockShapeBase> GetAllPossibleMoves(BlockShapeBase shape, BlockControl[,] gameBoard)
    //    {
    //        // 生成所有可能的旋转和移动
    //        List<BlockShapeBase> possibleMoves = new List<BlockShapeBase>();

    //        // 尝试所有旋转角度
    //        for (int rotation = 0; rotation < 4; rotation++)
    //        {
    //            BlockShapeBase rotatedShape = shape.Clone(); // 假设有一个Clone方法用于复制形状
    //            for (int i = 0; i < rotation; i++)
    //            {
    //                rotatedShape.Rotate(); // 假设有一个Rotate方法用于旋转形状
    //            }

    //            // 尝试将形状平移至左右两侧
    //            for (int x = 0; x < gameBoard.GetLength(1); x++)
    //            {
    //                BlockShapeBase movedShape = rotatedShape.Clone(); // 假设有一个Clone方法用于复制形状
    //                if (MoveIsValid(movedShape, gameBoard, x, 0))
    //                {
    //                    movedShape.MoveTo(x, 0); // 假设有一个MoveTo方法用于移动形状
    //                    possibleMoves.Add(movedShape);
    //                }
    //            }
    //        }

    //        return possibleMoves;
    //    }

    //    private double EvaluateMove(BlockShapeBase shape, BlockControl[,] gameBoard)
    //    {
    //        // 使用Pierre Dellacherie算法的评估函数来评估当前移动的得分
    //        // ...

    //        return 0; // 返回当前移动的得分
    //    }
    //}

}
